package com.fortune.dao;

import com.fortune.dto.in.cOrderMgt.COrderDealerProduceDto;
import com.fortune.dto.in.dealaerProduce.*;
import com.fortune.dto.in.product.ProductAddDto;
import com.fortune.dto.in.product.ProductEditDto;
import com.fortune.dto.in.product.ProductListDto;
import com.fortune.dto.in.product.ProductUpAndDown;
import com.fortune.entity.SimpleProduct;
import com.fortune.vo.cOrderMgt.DealerProductList;
import com.fortune.vo.channelDiscountMgt.ProductInChannealDiscountMgt;
import com.fortune.vo.dProduct.DAllProduct;
import com.fortune.vo.dProduct.DProduceList;
import com.fortune.vo.dProduct.DProduceSpecification;
import com.fortune.vo.dProduct.Discount;
import com.fortune.vo.mSelect.SelectProduct;
import com.fortune.vo.productMgt.Product;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

public interface MProductInfoDao {

    /**
     * 查询商品列表
     * @param companyId
     * @return
     */
    List<Product> queryProductInfoList(@Param("companyId") String companyId,@Param("productListDto") ProductListDto productListDto);

    /**
     * 查询商品列表个数
     * @param companyId
     * @return
     */
    int queryProductInfoListCount(@Param("companyId") String companyId,@Param("productListDto") ProductListDto productListDto);

    /**
     * 通过名称查询该商品是否存在
     * @param companyId
     * @param name
     * @return
     */
    int queryProductByName(@Param("companyId") String companyId, @Param("name") String name);

    /**
     * 通过商品编号查询该商品是否存在
     * @param companyId
     * @param number
     * @return
     */
    int queryProductByNumber(@Param("companyId") String companyId, @Param("number") String number);

    /**
     * 通过商品id查询该商品是否存在
     * @param companyId
     * @param produceId
     * @return
     */
    int queryProductByProduceId(@Param("companyId") String companyId, @Param("produceId") String produceId);

    /**
     * 新增商品
     * @param companyId
     * @param addDto
     * @return
     */
    int addProduce(@Param("companyId") String companyId, @Param("addDto") ProductAddDto addDto,@Param("pinyin") String pinyin);

    /**
     * 删除商品
     * @param companyId
     * @param produceId
     * @return
     */
    int deleteProduce(@Param("companyId") String companyId, @Param("produceId") String produceId);

    /**
     * 编辑商品
     * @param companyId
     * @param editDto
     * @return
     */
    int editProductByProduceIdAndProduceId(@Param("companyId") String companyId, @Param("editDto") ProductEditDto editDto,@Param("pinyin") String pinyin);

    /**
     * 商品上下架
     * @param companyId
     * @param upAndDown
     * @return
     */
    int upAndDownProduce(@Param("companyId") String companyId, @Param("upAndDown") ProductUpAndDown upAndDown);

    /**
     *查询商品统一批发价（对经销商）
     * @param companyId
     * @param produceId
     * @return
     */
    BigDecimal queryProducePrice(@Param("companyId") String companyId, @Param("produceId") String produceId);

    /**
     *查询商品编号,名称,id
     * @param companyId
     * @return
     */
    List<ProductInChannealDiscountMgt> queryProduceDiscount(@Param("companyId") String companyId,@Param("type") int type);

    /**
     * 查询商品根据id
     * @param companyId
     * @param produceId
     * @return
     */
    Product queryProduceInfo(@Param("companyId") String companyId, @Param("produceId") String produceId);

    /**
     * 编辑时根据名称和编号查询是否存在
     * @param companyId
     * @param editDto
     * @return
     */
    int queryEditProductByNameOrNumber(@Param("companyId") String companyId, @Param("editDto") ProductEditDto editDto);
    
    /**
     * 根据厂商id查询商品列表
     * @param companyId
     * @return
     */
    List<SimpleProduct> listSimpleProductsByMId(@Param("mId") String mId);
    
    /**
     * 根据厂商id,经销商id查询商品列表(包含价格)
     * @param mId
     * @param dId
     * @return
     */
    List<SelectProduct> listSelectProductsByMIdAndDId(@Param("mId") String mId, @Param("dId") String dId);

    List<SelectProduct> listSelectProductsByMIdAndDIds(@Param("mId")String mId,@Param("dId")String dId,@Param("type")Integer type);

    SelectProduct findWhoPrice(@Param("mid")String mid,@Param("id")String id);

    List<DealerProductList> queryMProduce(@Param("dealerId") String dealerId, @Param("cOrderDealerProduceDto") COrderDealerProduceDto cOrderDealerProduceDto);

    List<DealerProductList> queryDProduce(@Param("dealerId") String dealerId, @Param("cOrderDealerProduceDto") COrderDealerProduceDto cOrderDealerProduceDto);


    List<Product> queryProductInfoFuList(@Param("companyId") String companyId, @Param("list") List<String> list,@Param("productListDto") ProductListDto productListDto);

    int queryProductInfoListFuCount(@Param("companyId") String companyId, @Param("list") List<String> list,@Param("productListDto") ProductListDto productListDto);

    /**
     *
     * @param did
     * @param name
     * @return
     */
    int queryDProductByName(@Param("did") String did, @Param("name") String name);

    int queryDProductByNumber(@Param("did") String did, @Param("number") String number);

    int addDProduce(@Param("did") String did, @Param("addDto") DProductAddDto addDto,@Param("pinyin") String pinyin,@Param("id")String id);

    int addDProWholesale(@Param("did")String did,@Param("price")BigDecimal price,@Param("id")String id);

    int queryProductByDProduceId(@Param("did") String did, @Param("produceId") String produceId);

    int queryEditDProductByName(@Param("did") String did, @Param("editDto") DProductEditDto editDto);

    int queryEditDProductByNumber(@Param("did") String did, @Param("editDto") DProductEditDto editDto);

    int editProductByDProduceIdAndProduceId(@Param("did") String did, @Param("editDto") DProductEditDto editDto,@Param("pinyin")String pinyin);

    int deleteDProWholesalePrice(@Param("did")String did,@Param("id")String id);

    int deleteDProduce(@Param("did") String did, @Param("produceId") String produceId);

    Product queryDProduceInfo(@Param("did") String did, @Param("id") String id);

    int upAndDownDProduce(@Param("did") String did, @Param("upAndDown") DProductUpAndDown upAndDown);

    List<Product> queryDProductInfoFuList(@Param("did") String did, @Param("list") List<String> list, @Param("productListDto") DProductListDto productListDto);

    int queryDProductInfoListFuCount(@Param("did") String did, @Param("list") List<String> list, @Param("productListDto") DProductListDto productListDto);

    List<Product> queryDProductInfoList(@Param("did") String did, @Param("productListDto") DProductListDto productListDto);

    int queryDProductInfoListCount(@Param("did") String did, @Param("productListDto") DProductListDto productListDto);

    List<DProduceSpecification> queryProduceDSpecificationList(String did);

    List<DProduceList> queryProduct(String did);

    List<DAllProduct> queryAllProduce(@Param("mid")String mid,@Param("did")String did);

    List<Discount> queryDiscount(DiscountDto dto);
}
